Similar Question
Solution Tips
方案一: DFS
const solve = (board) => {
const m = board.length;
if (m == 0) return;
const n = board[0].length;
const dfs = (i, j) => {
if (i < 0 || i == m || j < 0 || j == n) return;
if (board[i][j] == 'O') {
board[i][j] = 'NO';
dfs(i + 1, j);
dfs(i - 1, j);
dfs(i, j + 1);
dfs(i, j - 1);
}
};
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {
if (board[i][j] == 'O') dfs(i, j);
}
}
}
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (board[i][j] === 'NO') board[i][j] = 'O';
else if (board[i][j] === 'O') board[i][j] = 'X';
}
}
};
方案二: BFS
const solve = (board) => {
const m = board.length;
if (m == 0) return [];
const n = board[0].length;
const dirs = [[1, 0], [-1, 0], [0, 1], [0, -1]];
const bfs = (i, j) => {
const queue = [[i, j]];
board[i][j] = 'NO';
while (queue.length) {
const [curI, curJ] = queue.shift();
for (const [dx, dy] of dirs) {
const x = curI + dx;
const y = curJ + dy;
if (x < 0 || x == m || y < 0 || y == n) continue;
if (board[x][y] == 'O') {
board[x][y] = 'NO';
queue.push([x, y]);
}
}
}
};
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {
if (board[i][j] == 'O') bfs(i, j);
}
}
}
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (board[i][j] === 'NO') board[i][j] = 'O';
else if (board[i][j] === 'O') board[i][j] = 'X';
}
}
};